import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { CatsController } from './cat.controller';
import { CatsService } from './cat.service';
import type { CatConfig, CatDatabaseOptions } from './interfaces/config.interface';
import { LoggerMiddleware } from '../common/middleware/logger.middleware';

/**
 * Cat 模块
 * 这个模块为 Cat 相关的功能提供独立的作用域
 * 在这里定义的 providers 只能在这个模块内使用，实现模块级别的依赖隔离
 */
@Module({
	controllers: [CatsController], // 注册 Cat 控制器
	providers: [
		CatsService, // Cat 服务

		// Cat 模块专用配置 - 只在 Cat 模块中可用
		{
			provide: 'CAT_CONFIG',
			useValue: {
				maxCats: 100, // 最大猫咪数量
				defaultBreed: 'Persian', // 默认品种：波斯猫
				allowedActions: ['create', 'read', 'update', 'delete'], // 允许的操作
				moduleScope: 'cat-module', // 模块标识
			} as CatConfig, // 添加类型注解
		},

		// Cat 数据库配置 - 只在 Cat 模块中可用
		{
			provide: 'CAT_DATABASE_OPTIONS',
			useValue: {
				host: 'localhost',
				port: 5432,
				database: 'cats_db',
				table: 'cats',
				connectionPool: {
					min: 2,
					max: 10,
				},
			} as CatDatabaseOptions, // 添加类型注解
		},
	],
	exports: [CatsService], // 导出 CatsService 以便其他模块可以使用
})
export class CatModule implements NestModule {
	configure(consumer: MiddlewareConsumer) {
		consumer.apply(LoggerMiddleware).forRoutes(CatsController);
	}
}
